package com.qianfeng.nio;

//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O/ = /O  
//                        ____/`---'/____  
//                      .   ' //| |// `.  
//                       / //||| : |||// /  
//                     / _||||| -:- |||||- /  
//                       | | /// - /// | |  
//                     | /_| ''/---/'' | |  
//                      / .-/__ `-` ___/-. /  
//                   ___`. .' /--.--/ `. . __  
//                ."" '< `.___/_<|>_/___.' >'"".  
//               | | : `- /`.;`/ _ /`;.`/ - ` : | |  
//                 / / `-. /_ __/ /__ _/ .-` / /  
//         ======`-.____`-.___/_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼                  BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//  


import java.nio.ByteBuffer;

/**
 * Created by Jackiechan on 2022/7/4 11:00
 *
 * @author Jackiechan
 * @version 1.0
 * @since 1.0
 */
public class Nio06 {
    public static void main(String[] args) throws Exception {
        //创建了一个长度为10 的buffer,并且保存了一些数据在里面
        ByteBuffer byteBuffer = ByteBuffer.allocate(10);
        for (int i = 0; i < byteBuffer.capacity(); i++) {
            byteBuffer.put((byte) i);
        }
        //手动设置了position,limit
        byteBuffer.position(2);
        byteBuffer.limit(8);
        //切割byteBuffer,从position切割到limit,包含position的数据,但是不包含limit,因为limit这个位置数据的是不可以读或者写的,其实返回的是一个共享数据的buffer,只是新的buffer有自己独立的position,limit,mark
        ByteBuffer newBuffer = byteBuffer.slice();
        //我们修改下新数组的数据
        for (int i = 0; i < newBuffer.capacity(); i++) {
            byte b = newBuffer.get();
            //System.err.println(b);
            newBuffer.put(i, (byte) (((int) b) * 2));
        }
        //按照说法,slice方法会返回一个新的buffer,是吗?想确认是不是,我们可以修改新的buffer的数据,看看老的变不变,实际上内容也会变化
        //恢复原始buffer的位置
        byteBuffer.position(0);
        byteBuffer.limit(byteBuffer.capacity());
        while (byteBuffer.hasRemaining()) {
            byte b = byteBuffer.get();
            System.err.println(b);
        }
    }
}
